package uy.org.softtech.cssuite.web.modelo;

import static org.springframework.util.StringUtils.hasText;
import uy.org.softtech.cssuite.core.Modelo;
import uy.org.softtech.cssuite.entidad.usuario.Usuario;

/**
 * Implementación que contendrá los datos ingresados en el formulario para
 * solicitar un cambio en las credenciales de una cuenta de usuario.
 * 
 * @author flobo
 *
 */
public class ModeloCredenciales extends Modelo {
	
	public enum Paso {
		SOLICITAR, RESTABLECER, CAMBIAR
	}
	
	// Comunes
	private Paso paso;
	
	// Paso SOLICITAR	
	private String usuario;
		
	// Paso RESTABLECER
	private String token;
	private String nueva;
	private String confirmar;
	private String recaptcha_challenge_field;
	private String recaptcha_response_field;
	
	// Paso CAMBIAR (Hecho por un administrador)
	private Long id;
	private String apellido;
	private String primerNombre;
	private String comentarios;

	public void inicializaModelo(Usuario usuario) {
		if (getId() == null) {
			setId(usuario.getId());
		}
		if(!hasText(getUsuario())) {
			setUsuario(usuario.getUsuario());
		}
		if(!hasText(getApellido())) {
			setApellido(usuario.getApellido());
		}
		if(!hasText(getPrimerNombre())) {
			setPrimerNombre(usuario.getPrimerNombre());
		}
	}
	
	/*
	 * 	GETTERS
	 */
	public Paso getPaso() {
		return paso;
	}
	public String getUsuario() {
		return usuario;
	}
	public String getToken() {
		return token;
	}
	public String getNueva() {
		return nueva;
	}
	public String getConfirmar() {
		return confirmar;
	}
	public String getRecaptcha_challenge_field() {
		return recaptcha_challenge_field;
	}
	public String getRecaptcha_response_field() {
		return recaptcha_response_field;
	}
	public Long getId() {
		return id;
	}
	public String getApellido() {
		return apellido;
	}
	public String getPrimerNombre() {
		return primerNombre;
	}
	public String getComentarios() {
		return comentarios;
	}
	
	/*
	 * 	SETTERS
	 */
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public void setPaso(Paso paso) {
		this.paso = paso;
	}
	public void setToken(String token) {
		this.token = token;
	}
	public void setNueva(String nueva) {
		this.nueva = nueva;
	}
	public void setConfirmar(String confirmar) {
		this.confirmar = confirmar;
	}
	public void setRecaptcha_challenge_field(String recaptcha_challenge_field) {
		this.recaptcha_challenge_field = recaptcha_challenge_field;
	}
	public void setRecaptcha_response_field(String recaptcha_response_field) {
		this.recaptcha_response_field = recaptcha_response_field;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	public void setPrimerNombre(String primerNombre) {
		this.primerNombre = primerNombre;
	}
	public void setComentarios(String comentarios) {
		this.comentarios = comentarios;
	}
	
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("ModeloCredenciales [");
		builder.append("paso=" + getPaso() + ", ");
		builder.append("usuario=" + getUsuario() + ", ");
		builder.append("token=" + getToken() + ", ");
		builder.append("nueva=" + getNueva() + ", ");
		builder.append("confirmar=" + getConfirmar() + ", ");
		builder.append("recaptcha_challenge_field=" + getRecaptcha_challenge_field() + ", ");
		builder.append("recaptcha_response_field=" + getRecaptcha_response_field() + ", ");
		builder.append("id=" + getId() + ", ");
		builder.append("apellido=" + getApellido() + ", ");
		builder.append("primerNombre=" + getPrimerNombre() + ", ");
		builder.append("comentarios=" + getComentarios());
		builder.append("]");
		return builder.toString();
	}

}
